libxl: Remove frontend and backend devices from xenstore after destroy
authorMarek Marczykowski <marmarek@mimuw.edu.pl>
Mon, 27 Jun 2011 16:28:52 +0000 (17:28 +0100)
committerMarek Marczykowski <marmarek@mimuw.edu.pl>
Mon, 27 Jun 2011 16:28:52 +0000 (17:28 +0100)
Cleanup frontend and backend devices from xenstore for all dev types - not only
disks. Because backend cleanup moved to libxl__device_destroy,
libxl__devices_destroy is somehow simpler.

Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
tools/libxl/libxl.c
tools/libxl/libxl_device.c

index c21cfe7d89755f570fad03e7d03708cf7da30cd9..2d61e0b7bb832aed73294ed38e2e2bc748976cad 100644 (file)
@@ -1113,8 +1113,6 @@ int libxl_device_disk_del(libxl_ctx *ctx, uint32_t domid,
     device.devid            = devid;
     device.kind             = DEVICE_VBD;
     rc = libxl__device_del(&gc, &device, wait);
-    xs_rm(ctx->xsh, XBT_NULL, libxl__device_backend_path(&gc, &device));
-    xs_rm(ctx->xsh, XBT_NULL, libxl__device_frontend_path(&gc, &device));
 out_free:
     libxl__free_all(&gc);
     return rc;
index 886caa0cde38cfc76b292ef46c5bea0ef807e2a5..e4c98eec77ea683cf2d1db212ba794fa70992cfd 100644 (file)
@@ -273,6 +273,8 @@ retry_transaction:
     if (!force) {
         xs_watch(ctx->xsh, state_path, be_path);
         rc = 1;
+    } else {
+        xs_rm(ctx->xsh, XBT_NULL, be_path);
     }
 out:
     return rc;
@@ -312,10 +314,8 @@ int libxl__devices_destroy(libxl__gc *gc, uint32_t domid, int force)
     char *path, *be_path, *fe_path;
     unsigned int num1, num2;
     char **l1 = NULL, **l2 = NULL;
-    int i, j, n = 0, n_watches = 0;
-    flexarray_t *toremove;
+    int i, j, n_watches = 0;
 
-    toremove = flexarray_make(16, 1);
     path = libxl__sprintf(gc, "/local/domain/%d/device", domid);
     l1 = libxl__xs_directory(gc, XBT_NULL, path, &num1);
     if (!l1) {
@@ -339,7 +339,6 @@ int libxl__devices_destroy(libxl__gc *gc, uint32_t domid, int force)
             if (be_path != NULL) {
                 if (libxl__device_destroy(gc, be_path, force) > 0)
                     n_watches++;
-                flexarray_set(toremove, n++, libxl__dirname(gc, be_path));
             } else {
                 xs_rm(ctx->xsh, XBT_NULL, path);
             }
@@ -352,7 +351,6 @@ int libxl__devices_destroy(libxl__gc *gc, uint32_t domid, int force)
     if (be_path && strcmp(be_path, "")) {
         if (libxl__device_destroy(gc, be_path, force) > 0)
             n_watches++;
-        flexarray_set(toremove, n++, libxl__dirname(gc, be_path));
     }
 
     if (!force) {
@@ -372,17 +370,13 @@ int libxl__devices_destroy(libxl__gc *gc, uint32_t domid, int force)
             }
         }
     }
-    for (i = 0; i < n; i++) {
-        flexarray_get(toremove, i, (void**) &path);
-        xs_rm(ctx->xsh, XBT_NULL, path);
-    }
 out:
-    flexarray_free(toremove);
     return 0;
 }
 
 int libxl__device_del(libxl__gc *gc, libxl__device *dev, int wait)
 {
+    libxl_ctx *ctx = libxl__gc_owner(gc);
     char *backend_path;
     int rc;
 
@@ -401,6 +395,7 @@ int libxl__device_del(libxl__gc *gc, libxl__device *dev, int wait)
         (void)wait_for_dev_destroy(gc, &tv);
     }
 
+    xs_rm(ctx->xsh, XBT_NULL, libxl__device_frontend_path(gc, dev));
     rc = 0;
 
 out: